package com.xg.util.export;

import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * 修改操作的单元格样式策略
 * 为"修改"类型的数据行中被修改的字段列应用特定样式（天蓝色背景）
 * 仅标记发生变更的列，未修改的列保持默认样式
 */
public class UpdateStyleStrategy implements CellStyleStrategy {
    // 当前处理的单元格列索引
    private final int columnIndex;
    // 被修改字段对应的列索引（需要特殊标记的列）
    private final int modifiedColumnIndex;

    /**
     * 构造方法：初始化列索引参数
     * @param columnIndex 当前单元格的列索引
     * @param modifiedColumnIndex 被修改字段对应的列索引
     */
    public UpdateStyleStrategy(int columnIndex, int modifiedColumnIndex) {
        this.columnIndex = columnIndex;
        this.modifiedColumnIndex = modifiedColumnIndex;
    }

    /**
     * 为修改的数据行应用样式：仅被修改的列显示天蓝色背景
     * @param style 单元格样式对象
     */
    @Override
    public void applyStyle(WriteCellStyle style) {
        // 当当前列是被修改的列时，设置天蓝色背景
        if (columnIndex == modifiedColumnIndex) {
            style.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
        } else {
            // 未修改的列保持白色背景
            style.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        }
    }
}